#ifndef DEVICE_SEARCH_H
#define DEVICE_SEARCH_H


#include <QDialog>

#include <QFile> // 文件操作类
#include <QFileInfo> // 文件信息类

#include <QUdpSocket>
#include <QTcpsocket>
#include <QAbstractSocket> //抽象套接字
#include <QHostAddress>  // IP地址

#include <QTextStream>  // 文本流类

#include <QMessageBox>
#include <QDebug>

#include <QByteArray>
#include <QJsonObject>  // JSON对象类
#include <QJsonDocument>  // JSON文档类
#include <QList>

#include <QDateTime>
#include <QTimer>

#include <QCryptographicHash> // MD5值


#include "mythread.h"

namespace Ui {
class Device_search;
}

class Device_search : public QDialog
{
    Q_OBJECT

public:
    explicit Device_search(QWidget *parent = 0);
    ~Device_search();



    QString ipstring; // 存储IP地址字符串
    quint16 portstring;  // 存储端口号

    QHostAddress senderIp; // 存储发送方IP地址
    quint16 senderPort; // 存储发送方端口号

    char buf[256]={0};  // UDP接收

private:
    Ui::Device_search *ui;

    QUdpSocket* udpsocket;  // UDP套接字，用于UDP通信
    QTcpSocket* tcpsocket;  // TCP套接字，用于TCP通信

    MyThread* mt;           // 自定义线程对象指针

    QString readPath;       // 文件路径


private slots:

    void seekSlots();       // 用于搜索设备
    void readUDPslots();    // 处理UDP数据接收

    void connectSlots();    // 用于建立TCP连接
    void readSlots();       // 处理TCP数据接收


    void upgradeSlots();    // 升级


    void openSlots();    // 选择升级文件


    void on_progressUpdated(int percent);    // 进度更新槽函数
    void on_transferFinished(bool success);  // 传输完成槽函数

    QString calculateFileMD5(const QString &filePath); // 计算MD5


};

#endif // DEVICE_SEARCH_H
